#!usr/bin/env python3
# -*- encoding: utf-8 -*-
#通过xlrd读取Excel xlwt写Excel


import xlrd,xlwt
from collections import defaultdict
import os
import time
import json

#api http://xlrd.readthedocs.io/en/latest/api.html#module-xlrd
def read_to_json(excel_path,writeFile=False,encoding='utf8'):
    '''
    把Excel数据读取到json文件
        Excel的每一个表写进一个list 
        自行查看格式
    '''
    st = time.clock()   

    try:
        data = xlrd.open_workbook(excel_path) #指定覆盖编码读取 ,encoding_override="utf8"        
    except Exception as e:
        print("读取 %s 出现异常:"%excel_path,e)
    tables = data.sheets() #读取所有表
    tableNames = [ sheet.name for sheet in tables]
    datas= defaultdict(list)    
    for sheet in tables:
        sheetName = sheet.name #表名        
        fieldNames = [ cell.value for cell in sheet.row(0)] #第一行为字段名    
        nrows = sheet.nrows #总行数   
        for i in range(1,nrows):
            rowData = sheet.row(i) #该行的数据            
            #print('rowData:',type(rowData))
            cellData = {}
            for cell,fieldName in zip(rowData,fieldNames): #zip是顶级函数
                cellData[fieldName] = cell.value
            datas[sheetName].append(cellData)

        if writeFile:#每个表生成一个json文件 好像有点多
            dataFolder = os.path.split(excel_path)[0]
            jsonFile = os.path.join(dataFolder,sheetName+'.json')
            if os.path.exists(jsonFile):
                os.remove(jsonFile) #删除文件 或者 unlink 函数
            #os.rmdir(jsonFile) #只能删除目录
            #记得要以utf8编码打开文件 否则中文会有乱码
            # 如果之前已经生成过有乱码的文件,然再改成utf8格式读取还是会乱码,需要删掉原来的文件
            with open(jsonFile,'w',encoding='utf8') as f:                 
                json.dump(datas[sheetName],f,indent=2,ensure_ascii=False) #可以通过 indent 字段设置格式化输出 值可以选从0开始有不同的缩进级别选择
                
    et = time.clock()
    print('对 %s 文件的 %s 个表进行处理耗时 %.3f 秒'%(excel_path,str(len(tables)),(et-st)))
    return datas

#api http://xlwt.readthedocs.io/en/latest/api.html
def save_excel(strFle):
    '''
        把数据写进Excel的例子
    '''
    work_book = xlwt.Workbook() #创建Excel
    sheet1 = work_book.add_sheet('sheet1',cell_overwrite_ok=True) #创建表
    #sheet2 = work_book.add_sheet('sheet2',cell_overwrite_ok=True)
    sheet1.write(0,0,'id') #填充数据，参数：行,列,单元格数据  (行列是从0开始的)
    sheet1.write(1,0,101)
    work_book.save(strFle) #保存Excel文件









